// BIMFACE 数据服务-分享相关接口
// https://bimface.com/docs/model-data-service/v1/api-reference/createUsingPOST_1.html

import  bimfaceHttp from '@/api/Bimface';

enum Api {
  Share = '/share',
  Shares = '/shares',
}

/**
 * @todo: interface待实现
 * @abstract: 生成分享链接
 * @description: 文件发起转换、集成后，可以根据fileId或integrateId生成对应文件的分享链接；创建GIS场景后，也可通过GIS场景ID生成场景的分享链接。
 */
export function intiateShareLink(params: {
  activeHours?: number;
  expireDate?: string;
  fileId?: number;
  integrateId?: number;
  needPassword?: boolean;
  sceneId?: number;
}) {
  return bimfaceHttp.post<any>({ url: Api.Share, params: params });
}

/**
 * @todo: interface待实现
 * @abstract: 更新分享链接
 * @description: 对已生成的文件分享链接的有效期、密码进行修改和刷新。该接口为增量更新，在传参时需填入修改的参数，若想保持参数值不变，则无需传入该参数。
 */
export function updateShareLink(params: {
  expireDate?: string;
  fileId?: number;
  integrateId?: number;
  needPassword?: boolean;
  sceneId?: number;
}) {
  return bimfaceHttp.patch<any>({ url: Api.Share, params: params });
}

/**
 * @todo: interface待实现
 * @abstract: 获取分享列表
 * @description: 显示Appkey下所有的分享列表（包含分页信息）。
 */
export function getShareList(params: { pageNo?: number; pageSize?: number }) {
  return bimfaceHttp.get<any>({ url: Api.Shares, params: params });
}

/**
 * @todo: interface待实现
 * @abstract: 取消分享链接
 * @description: 若不希望继续分享，可选择(fileId、integrateId、sceneId)其中之一取消对应的分享链接，使之失效。
 */
export function deleteShareLink(params: {
  fileId?: number;
  integrateId?: number;
  sceneId?: number;
}) {
  return bimfaceHttp.delete<any>({ url: Api.Share, params: params });
}

/**
 * @todo: interface待实现
 * @abstract: 批量取消分享链接
 * @description: 若不希望继续分享，可以根据sourceId批量取消对应的分享链接，使之失效
 */
export function deleteShareLinksInBatches(params: { sourceIds?: number[] }) {
  return bimfaceHttp.delete<any>({ url: Api.Shares, params: params });
}

/**
 * @todo: interface待实现
 * @abstract: 获取分享链接信息
 * @description: 获取分享链接信息，包括有效期、访问密码、访问地址。
 */
export function getShareLink(params: {
  fileId?: number;
  integrateId?: number;
  sceneId?: number;
  token?: string;
}) {
  return bimfaceHttp.get<any>({ url: Api.Share, params: params });
}
